package cl.utfsm.android.funciones;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import cl.utfsm.android.clases.Categoria;
import cl.utfsm.android.clases.Comentario;
import cl.utfsm.android.clases.Evento;
import cl.utfsm.android.clases.Visitas;


public class webServices {
	
	//Funcion que parsea los datos que vienen en formato JSON del Web Services
 	public static ArrayList<Evento> parseJSONdataEvent(String data) throws JSONException {
 		ArrayList<Evento> eventosList = new ArrayList<Evento>();
 		JSONObject jsonObj = new JSONObject(data);
		String strData = jsonObj.getString("eventos");
		JSONArray jsonArray = new JSONArray(strData);
		for (int i = 0; i < jsonArray.length(); i++){
			JSONObject eventoObj = jsonArray.getJSONObject(i);
			String eventoStr = eventoObj.getString("evento");
			JSONObject item = new JSONObject(eventoStr);
			Evento evento = new Evento(Integer.parseInt(item.getString("id_evento")),
										item.getString("nombre_evento"),
										item.getString("direccion_evento"),
									    item.getString("fecha_inicio"),
									    item.getString("fecha_termino"),	
										item.getString("precios"),
										Integer.parseInt(item.getString("id_categoria")),
										item.getString("nombre_categoria"),
										item.getInt("estado"),
										item.getString("latitud"),
										item.getString("longitud"),
										item.getString("descripcion"));
			eventosList.add(evento);	
		}
		return eventosList;
	}
 	
 	// FUNCION QUE RETORNA DESDE UN WEBSERVICE Y EN FORMATO JSON TODAS LAS CATEGORIAS Y SUS ATRIBUTOS
 	public static ArrayList<Categoria> parseJSONdataCategoria(String data) throws JSONException {
 		ArrayList<Categoria> categoriasList = new ArrayList<Categoria>();
 		JSONObject jsonObj = new JSONObject(data);
		String strData = jsonObj.getString("categorias");
		JSONArray jsonArray = new JSONArray(strData);
		for (int i = 0; i < jsonArray.length(); i++){
			JSONObject categoriaObj = jsonArray.getJSONObject(i);
			String categoriaStr = categoriaObj.getString("categoria");
			JSONObject item = new JSONObject(categoriaStr);
			Categoria categoria = new Categoria(Integer.parseInt(item.getString("id_categoria")),
										item.getString("nombre_categoria"));
			categoriasList.add(categoria);	
		}
		return categoriasList;
	}
 	
 	
 	
 	
 // FUNCION QUE RETORNA DESDE UN WEBSERVICE Y EN FORMATO JSON LOS COMENTARIOS DE UN EVENTO
 	public static ArrayList<Comentario> parseJSONdataComment(String data) throws JSONException {
 		ArrayList<Comentario> comentariosList = new ArrayList<Comentario>();
 		JSONObject jsonObj = new JSONObject(data);
		String strData = jsonObj.getString("comentarios");
		JSONArray jsonArray = new JSONArray(strData);
		
		for (int i = 0; i < jsonArray.length(); i++){
			JSONObject comentarioObj = jsonArray.getJSONObject(i);
			String comentarioStr = comentarioObj.getString("comentario");
			JSONObject item = new JSONObject(comentarioStr);
			Comentario comentario= new Comentario(Integer.parseInt(item.getString("id_comentario")),
											   Integer.parseInt(item.getString("id_evento")),					
											   item.getString("nombre"),
											   item.getString("comentario"), 
											   item.getString("fecha"));																							
			comentariosList.add(comentario);	
		}
		return comentariosList;
	}
 	
 // FUNCION QUE RETORNA DESDE UN WEBSERVICE Y EN FORMATO JSON LA Visitas DE UN EVENTO
  	public static ArrayList<Visitas> parseJSONdataVisitas(String data) throws JSONException {
  		ArrayList<Visitas> VisitastList = new ArrayList<Visitas>();
 		JSONObject jsonObj = new JSONObject(data);
		String strData = jsonObj.getString("Visitast");
		JSONArray jsonArray = new JSONArray(strData);
		for (int i = 0; i < jsonArray.length(); i++){
			JSONObject VisitasObj = jsonArray.getJSONObject(i);
			String VisitasStr = VisitasObj.getString("Visitas");
			JSONObject item = new JSONObject(VisitasStr);
			Visitas Visitas = new Visitas (Integer.parseInt(item.getString("id_puntuacion")),
					   								Integer.parseInt(item.getString("id_evento")),
					   								Integer.parseInt(item.getString("cantidad")));
			VisitastList.add(Visitas);	
		}
		return VisitastList;
 	}
 		
 	
 	// FUNCION QUE OBTIENE LA INFORMACION CON JSON
 	public static String getJSONdata(String url) {
 		String response = "";
		try {
			DefaultHttpClient httpClient = new DefaultHttpClient();
			HttpGet method = new HttpGet(url);
			HttpResponse httpResponse = httpClient.execute(method);
			InputStream is = httpResponse.getEntity().getContent();
			response = convertStreamToString(is);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return response;
	}

 	
 	// FUNCION QUE CONVIERTE LA SALIDA EN STRING
	public static String convertStreamToString(InputStream is) {
		BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        StringBuilder sb = new StringBuilder();

        String line = null;
        try {
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return sb.toString();
	} 

}
